#include "bsp_EXTI.h"
#include "bsp_USART.h"


/************************************************************
 * @name	 	void bsp_EXTI_Init(void)
 * @date		2022 10.7 吴昕灿
 * @function	初始化外部中断
 * @parameters	none
 * @retvalue 	none
 * @
**************************************************************/
void bsp_EXTI_Init(void)
{


	GPIO_InitTypeDef GPIO_STR;
  	EXTI_InitTypeDef EXTI_Str;
  	NVIC_InitTypeDef NVIC_Str;

  	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

  	GPIO_STR.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  	GPIO_STR.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;
  	GPIO_STR.GPIO_Speed = GPIO_Speed_50MHz;
  	GPIO_Init(GPIOC,&GPIO_STR);

	GPIO_STR.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  	GPIO_STR.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9;
  	GPIO_STR.GPIO_Speed = GPIO_Speed_50MHz;
  	GPIO_Init(GPIOD,&GPIO_STR);

	
	EXTI_ClearITPendingBit(EXTI_Line0); 
	EXTI_ClearITPendingBit(EXTI_Line2); 
	EXTI_ClearITPendingBit(EXTI_Line4); 
	EXTI_ClearITPendingBit(EXTI_Line8); 

 
	EXTI_Str.EXTI_LineCmd = ENABLE;
  	EXTI_Str.EXTI_Mode = EXTI_Mode_Interrupt;
  	EXTI_Str.EXTI_Trigger = EXTI_Trigger_Falling;
	EXTI_Str.EXTI_Line = EXTI_Line4|EXTI_Line2|EXTI_Line0|EXTI_Line8;
	EXTI_Init(&EXTI_Str);


	NVIC_Str.NVIC_IRQChannelCmd = ENABLE;
  	NVIC_Str.NVIC_IRQChannelPreemptionPriority = 0;
  	NVIC_Str.NVIC_IRQChannelSubPriority = 0;

	NVIC_Str.NVIC_IRQChannel = EXTI4_IRQn;
	NVIC_Init(&NVIC_Str);
	NVIC_Str.NVIC_IRQChannel = EXTI2_IRQn;
	NVIC_Init(&NVIC_Str);
	NVIC_Str.NVIC_IRQChannel = EXTI0_IRQn;
	NVIC_Init(&NVIC_Str);
	NVIC_Str.NVIC_IRQChannel = EXTI9_5_IRQn;
	NVIC_Init(&NVIC_Str);

	GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource0);
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource2);
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource4);
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOD,GPIO_PinSource8);
	
}

